package ejb.casacentral.persistence.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table
@NamedQueries({
	@NamedQuery(name ="OrdenCompra.todas",query="select s from OrdenCompra s "),
	@NamedQuery(name ="OrdenCompra.porCodigo",query="select s from OrdenCompra s where s.id = :id"),
	@NamedQuery(name ="OrdenCompra.porCodigos",query="select s from OrdenCompra s where s.codigo in (:codigos)")
})
public class OrdenCompra implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 3511628981405543809L;
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Long id;
	@Column
	private String codigo;
	@OneToMany(cascade=CascadeType.ALL)
	@JoinColumn(name="idOrden",referencedColumnName="id")
	private List<ItemOrdenCompra> rodamientos = new ArrayList<ItemOrdenCompra>();
	@Column
	private Date fechaEmision;
	@ManyToOne
	private Proveedor proveedor;
	@ManyToOne
	private SolicitudCompra solicitud;
	
	
	@Column
	private String estado;


	@Override
	public String toString() {
		return "OrdenCompra [id=" + id + ", codigo=" + codigo
				+ ", rodamientos=" + rodamientos + ", fechaEmision="
				+ fechaEmision + ", proveedor=" + proveedor + ", solicitud="
				+ solicitud + ", estado=" + estado + "]";
	}


	public Long getId() {
		return id;
	}


	public void setId(Long id) {
		this.id = id;
	}


	public String getCodigo() {
		return codigo;
	}


	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}


	public List<ItemOrdenCompra> getRodamientos() {
		return rodamientos;
	}


	public void setRodamientos(List<ItemOrdenCompra> rodamientos) {
		this.rodamientos = rodamientos;
	}


	public Date getFechaEmision() {
		return fechaEmision;
	}


	public void setFechaEmision(Date fechaEmision) {
		this.fechaEmision = fechaEmision;
	}


	public Proveedor getProveedor() {
		return proveedor;
	}


	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}


	public SolicitudCompra getSolicitud() {
		return solicitud;
	}


	public void setSolicitud(SolicitudCompra solicitud) {
		this.solicitud = solicitud;
	}


	public String getEstado() {
		return estado;
	}


	public void setEstado(String estado) {
		this.estado = estado;
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		result = prime * result + ((estado == null) ? 0 : estado.hashCode());
		result = prime * result
				+ ((fechaEmision == null) ? 0 : fechaEmision.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result
				+ ((proveedor == null) ? 0 : proveedor.hashCode());
		result = prime * result
				+ ((rodamientos == null) ? 0 : rodamientos.hashCode());
		result = prime * result
				+ ((solicitud == null) ? 0 : solicitud.hashCode());
		return result;
	}


	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		OrdenCompra other = (OrdenCompra) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		if (estado == null) {
			if (other.estado != null)
				return false;
		} else if (!estado.equals(other.estado))
			return false;
		if (fechaEmision == null) {
			if (other.fechaEmision != null)
				return false;
		} else if (!fechaEmision.equals(other.fechaEmision))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (proveedor == null) {
			if (other.proveedor != null)
				return false;
		} else if (!proveedor.equals(other.proveedor))
			return false;
		if (rodamientos == null) {
			if (other.rodamientos != null)
				return false;
		} else if (!rodamientos.equals(other.rodamientos))
			return false;
		if (solicitud == null) {
			if (other.solicitud != null)
				return false;
		} else if (!solicitud.equals(other.solicitud))
			return false;
		return true;
	}


	public OrdenCompra(Long id, String codigo,
			List<ItemOrdenCompra> rodamientos, Date fechaEmision,
			Proveedor proveedor, SolicitudCompra solicitud, String estado) {
		super();
		this.id = id;
		this.codigo = codigo;
		this.rodamientos = rodamientos;
		this.fechaEmision = fechaEmision;
		this.proveedor = proveedor;
		this.solicitud = solicitud;
		this.estado = estado;
	}


	public OrdenCompra(String codigo, List<ItemOrdenCompra> rodamientos,
			Date fechaEmision, Proveedor proveedor, SolicitudCompra solicitud,
			String estado) {
		super();
		this.codigo = codigo;
		this.rodamientos = rodamientos;
		this.fechaEmision = fechaEmision;
		this.proveedor = proveedor;
		this.solicitud = solicitud;
		this.estado = estado;
	}


	public OrdenCompra() {
		super();
	}
	
	public void addRodamiento(ItemOrdenCompra ioc) {
		if(this.rodamientos==null){
			this.rodamientos = new ArrayList<ItemOrdenCompra>();
		}
		this.rodamientos.add(ioc);
		
	}

	
			
	
	
	
}
